/*
 【基础】同时出现的数
  题目描述
    Medusa 同学拿到了 2 组数字，老师请你编程帮他找出，第 2 组数中的哪些数，在第 1 组数中出现了，从小到大输出所有满足条件的数。
    比如：
      第 1 组数有：8 7 9 8 2 6 3
      第 2 组数有：9 6 8 3 3 2 10
      那么应该输出：2 3 3 6 8 9
  输入
    第一行两个整数 n 和 m，分别代表 2 组数的数量
    第二行 n 个正整数
    第三行 m 个正整数
    对于 60% 的数据 1 ≤n, m ≤ 1000，每个数 <= 2*10^9
    对于 100% 的数据 1 ≤n, m ≤ 100000，每个数 <= 2*10^9
  输出
    按照要求输出满足条件的数，数与数之间用空格隔开
  样例输入
    7 7
    8 7 9 8 2 6 3
    9 6 8 3 3 2 10
  样例输出
    2 3 3 6 8 9
*/

#include <bits/stdc++.h>

using namespace std;

int main() {
    int n, m;
    int a[100005] = {};  // 第 1 组数字
    vector <int> num;    // 第 2 组和第 1 组中都存在的数

    cin >> n >> m;
    for (int i = 1; i <= n; i++){
        cin >> a[i];
    }
    sort(a + 1, a + n + 1);

    for (int i = 1; i <= m; i++) {
        int b;
        cin >> b;
        if (binary_search(a + 1, a + n + 1, b) == 1) { // 如果是第 1 组中存在的数, 则将其push_back进动态数组 num
            num.push_back(b);
        }
    }
    sort(num.begin(), num.end()); // 对动态数组 num 中的数按从小到大的顺序进行排序

    for (int i = 0; i < num.size(); i++) {
        cout << num[i] << " ";
    }

    return 0;
}